package br.org.ifrr.repository;



import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.org.ifrr.model.GrupoUsuario;
import br.org.ifrr.repository.filter.GrupoUsuarioFilter;

public class GrupoUsuarios implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private EntityManager manager;

	public GrupoUsuario porId(Long id) {
		return manager.find(GrupoUsuario.class, id);
	}

	public GrupoUsuario guardar(GrupoUsuario grupoUsuario) {
		return manager.merge(grupoUsuario);
	}

	@SuppressWarnings("unchecked")
	public List<GrupoUsuario> filtrados(GrupoUsuarioFilter filtro) {
		Session session = manager.unwrap(Session.class);
		Criteria criteria = session.createCriteria(GrupoUsuario.class);

		if (StringUtils.isNotBlank(filtro.getNome())) {
			criteria.add(Restrictions.ilike("nome", filtro.getNome(),
					MatchMode.ANYWHERE));
		}

		return criteria.addOrder(Order.asc("nome")).list();
	}

	public List<GrupoUsuario> porNome(String nome) {
		return this.manager
				.createQuery("from GrupoUsuario where upper(nome) like :nome",
						GrupoUsuario.class)
				.setParameter("nome", nome.toUpperCase() + "%").getResultList();
	}

	public List<GrupoUsuario> todos() {
		return manager.createQuery("from GrupoUsuario", GrupoUsuario.class).getResultList();
	}
}
